c语言do..{if}..while问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 09:40:00
main()
{
int y,x,t;
char s,m, p;
do
{
scanf("%c",&p);
y=p;
if(y==121)
{
printf("y=%d",y);
scanf("%c",&s);
x=s;
printf("x=%d",x);
}
else
{
printf("乱来");
scanf("%c",&m);
t=m;
printf("t=%d",t);
}
}
while(x==121||t==121);
}
怎么运行到printf("y=%d",y);是我还没输入“s”,他就把x值输出来了,并且x=10,不论怎样t都等于10,怎么回事,各位高手指点下。

scanf("%c",&p); 这句后面加一个getchar();

scanf("%c", &p);
getchar();

原因是你输入完p的值后,按了一下回车,p将输入的值接收以后,回车还在缓冲区里,等到scanf("%c", &s);的时候,不用等你输入,因为缓冲区已经有东西了,s就把回车给接收了。要在scanf后面加一个getchar()来吃掉回车。

scanf()函数读取控制台输入缓冲区
所以其读取的是上一次输入而未被请求的字符
在你的程序中
也就是scanf("%c",&p); 语句未处理的回车 0x0A
所以这句 scanf("%c",&s); 读出的s值就是0x0A
当然x=s=10 咯